- (void)model:(GMenuModel *)model didChangeAtPosition:(NSInteger)position removed:(NSInteger)removed added:(NSInteger)added;
+- (gboolean)handleChanges;
+
@end
return observer;
}
+static gboolean
+gtk_quartz_menu_handle_changes (gpointer user_data)
+{
+ GNSMenu *menu = user_data;
+
+ return [menu handleChanges];
+}
+
static void
gtk_quartz_menu_items_changed (GMenuModel *model,
gint position,
- (void)model:(GMenuModel *)model didChangeAtPosition:(NSInteger)position removed:(NSInteger)removed added:(NSInteger)added
{
+ if (update_idle == 0)
+ update_idle = gdk_threads_add_idle (gtk_quartz_menu_handle_changes, self);
}
- (void)appendItemFromModel:(GMenuModel *)aModel atIndex:(gint)index withHeading:(gchar **)heading
[self appendFromModel:model withSeparators:with_separators];
}
+- (gboolean)handleChanges
+{
+ while (connected)
+ {
+ g_signal_handlers_disconnect_by_func (connected->data, gtk_quartz_menu_items_changed, self);
+ g_object_unref (connected->data);
+
+ connected = g_slist_delete_link (connected, connected);
+ }
+
+ [self populate];
+
+ update_idle = 0;
+
+ return G_SOURCE_REMOVE;
+}
+
- (id)initWithTitle:(NSString *)title model:(GMenuModel *)aModel actions:(GActionObservable *)someActions hasSeparators:(BOOL)hasSeparators
{
if((self = [super initWithTitle:title]) != nil)